package wei.qiang.ye.asyncdemo.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

@Component
public class GlobalAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 后续如果接入 ELK ，就可以基于该异常日志进行告警
     * AsyncUncaughtExceptionHandler 只能拦截返回类型非 Future 的异步调用方法 (查看源码得知)
     * 返回类型为 Future 的异步调用方法，需要通过异步回调来处理
     * @param ex
     * @param method
     * @param params
     */
    @Override
    public void handleUncaughtException(Throwable ex, Method method, Object... params) {
        logger.error("[handleUncaughtException][method({}) params({}) 发生异常]",
                method, params, ex);
    }

}
